//
//  ZLFloatIconMoveHelper.h
//
//  Created by Jiaozl on 2022/1/10.
//

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

typedef NS_ENUM(NSInteger, ZLFloatIconMoveableEdgeType) {
    ZLFloatIconMoveableEdgeTypeUnknown, ///< 未知
    ZLFloatIconMoveableEdgeTypeLeft,    ///< 靠左
    ZLFloatIconMoveableEdgeTypeRight,   ///< 靠右
};

@interface ZLFloatIconMoveHelper : NSObject

@property (nonatomic, assign) BOOL draggable;       ///<  是否可拖动，默认为 YES
@property (nonatomic, assign) BOOL needLongPress;   ///< 需要长按触发拖动，默认为 NO
@property (nonatomic, assign) BOOL autoDock;        ///< 是否自动停靠，默认为YES
@property (nonatomic, assign) BOOL scrollToAdsorbed;///< 页面滚动时，是否吸附到屏幕边缘， 默认为YES，需指定currentEdgeType才能生效
@property (nonatomic, assign) ZLFloatIconMoveableEdgeType currentEdgeType;///< 当前位置
@property (nonatomic, assign) CGFloat appearPercent;                       ///<  吸附到边缘时，漏出部分占总宽度的百分比，默认 1.0 / 3.0
@property (nonatomic, assign) CGFloat absorbedAlpha;                       ///<  吸附到边缘时的透明度，默认 0.3

@property (nonatomic, assign) CGFloat absorbDuration;   ///<  吸附动画时长，默认 0.2
@property (nonatomic, assign) CGFloat disAbsorbDuration;///<  释放动画时长， 默认 0.5

// 如： (10, 20, 30, 40)  ：moveableView的上下左右分别 至少 距离上 10 ，左 20 ，下 30 右 40
@property (nonatomic, assign) UIEdgeInsets edgeInset;   ///<  停留位置内边距

@property (nonatomic, copy) void(^moveEndWithDuration)(NSTimeInterval duration);    ///< 拖动结束回调，duration 拖动时长

/**
 @brief 配置moveableView为可拖动
 @param moveableView 可拖动view
 @param containerView 所在容器view
 */
- (void)configMoveableView:(UIView *)moveableView containerView:(UIView *)containerView;

/**
 @brief 开始滚动
 scrollToAdsorbed 为YES时
 如果需要滚动中需要吸附到边缘调用此方法
 */
- (void)beginScroll;

/**
 @brief 结束滚动
 scrollToAdsorbed 为YES时
 如果需要滚动中需要吸附到边缘调用此方法
 */
- (void)endScroll;

@end

NS_ASSUME_NONNULL_END
